﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Biciq.Datos;
using System.Linq;
using System.Windows.Browser;
using Biciq.Silverlight.UI.Clases;
namespace Biciq.Silverlight.UI
{
    public class GenerarTarjetaVistaModelo:VistaModeloBase
    {
        #region Constructores
        public GenerarTarjetaVistaModelo(Cliente cliente, Visibility mostrarMotivo)
        {
            ClienteSeleccionado = cliente;
            MostrarMotivo = mostrarMotivo;
            HabilitarCancelar =  false;

            InicializarMensajesError();
        }
        public GenerarTarjetaVistaModelo(Cliente cliente, Visibility mostrarMotivo, bool habilitarCancelar)
        {
            ClienteSeleccionado = cliente;
            MostrarMotivo = mostrarMotivo;
            HabilitarCancelar = habilitarCancelar;

            InicializarMensajesError();
        }

        #endregion

        #region Campos
        private Cliente _clienteSeleccionado;
        private string _codigo;
        private string _motivo;
        private ClienteTarjeta _nuevaTarjeta;
        private Visibility _mostrarMotivo;
        private bool _habilitarCancelar;

        public bool HabilitarCancelar
        {
            get { return _habilitarCancelar; }
            set
            { 
                _habilitarCancelar = value;
                RaisePropertyChanged("HabilitarCancelar");
            }
        }
        /// <summary>
        /// Detalles de la genreación de Tarjeta.
        /// </summary>
        public Visibility MostrarMotivo
        {
            get { return _mostrarMotivo; }
            set
            { 
                _mostrarMotivo = value;
                RaisePropertyChanged("MostrarMotivo");
            }
        }
        public ClienteTarjeta NuevaTarjeta
        {
            get { return _nuevaTarjeta; }
            set
            {
                _nuevaTarjeta = value;
                RaisePropertyChanged("NuevaTarjeta");
            }
        }
        /// <summary>
        /// Texto Motivo por la cual se realizo una nueva bicicleta.
        /// </summary>
        public string Motivo
        {
            get { return _motivo; }
            set 
            { 
                _motivo = value;
                RaisePropertyChanged("Motivo");
                if (NuevaTarjeta != null)
                NuevaTarjeta.MotivoCambio = _motivo;
            }
        }
       
        
        #endregion
        #region Propiedades
        /// <summary>
        /// Codigo de la tarjeta.
        /// </summary>
        public string Codigo
        {
            get { return _codigo; }
            set { 
                
                _codigo = value;
                RaisePropertyChanged("Codigo");
                
            }
        }

        public Cliente ClienteSeleccionado
        {
            get { return _clienteSeleccionado; }
            set
            {
                _clienteSeleccionado = value;
                RaisePropertyChanged("ClienteSeleccionado");
            }
        }
        #endregion

        #region Métodos Públicos
        public void validarTarjeta()
        {
            Procesando = true;
            InicializarMensajesError();
            if (Codigo != null && Codigo != "")
            {
                BiciqContexto.Tarjetas.Clear();
                BiciqContexto.Load(BiciqContexto.GetTarjetaPorCodigoQuery(Codigo)).Completed += delegate
                {

                    var tarjeta = BiciqContexto.Tarjetas.FirstOrDefault();
                    if (tarjeta != null)
                    {
                        if (ClienteSeleccionado.Tarjeta != null)
                        {
                            ClienteSeleccionado.Tarjeta.Estado = "ELIMINADO";
                        }
                        ClienteSeleccionado.TarjetaId = tarjeta.id;
                        
                        tarjeta.Estado = "ASIGNADO";
                        NuevaTarjeta = new ClienteTarjeta();
                        NuevaTarjeta.IdTarjeta = tarjeta.id;
                        NuevaTarjeta.EsActual = true;
                        NuevaTarjeta.IdCliente = ClienteSeleccionado.Id;
                        NuevaTarjeta.Id = Guid.NewGuid();
                        NuevaTarjeta.MotivoCambio = Motivo;
                        NuevaTarjeta.FechaGeneracion = DateTime.Now;
                        NuevaTarjeta.UsuarioGeneracion = CacheCliente.UsuarioLogueado.id;
                            
                    }
                    else
                    {
                        LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar("El código ingresado no está ingresado en el Sistema o está asignado a otra persona, confirme con el administrador del Sistema", "Error Código Tarjeta", LogicStudio.Framework.UI.Utilidades.TipoVentana.Error);
                        NuevaTarjeta = null; 
                        Codigo = "";
                    }
                    Procesando = false;

                };
            }

        }

        public override void Guardar()
        {
            InicializarMensajesError();
            if (Codigo == null || Codigo == "")
            {
                AgregarMensajeError("Debe ingresar un código de Tarjeta Válido");
            }
            
            if (MostrarMotivo == Visibility.Visible)
            {
                if (Motivo == null || Motivo == "")
                {
                    AgregarMensajeError("Debe ingresar Motivo del cambio de Tarjeta");
                }

            }


            if (ClienteSeleccionado.TarjetaId == null)
            {
                AgregarMensajeError("El código de tarjeta no se ha leído correctamente, vuelva a ingresar el codigo utilizando el lector ");

            }


            if (ListaErrores.Count>0)
            {
                MostrarErrores = Visibility.Visible;
                return;
            }

          
                if (NuevaTarjeta == null)
                {
                    LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar("La tarjeta no se guardado correctamente, vuelva por favor a ingresarl el código de la tarjeta nuevamente", "Error en Generación de Tarjeta ", LogicStudio.Framework.UI.Utilidades.TipoVentana.Error);
                    Codigo = "";
                    return;
                }


                if (!HabilitarCancelar)
                {

                    ClienteSeleccionado.Estado = "Activo";
                    ClienteSeleccionado.FechaActivacion = DateTime.Now;
                    ClienteSeleccionado.CaducidadSuscripcion = DateTime.Now.AddDays(365);
                    ClienteSeleccionado.TarjetaId = NuevaTarjeta.IdTarjeta;
                }
               

            BiciqContexto.ClienteTarjetas.Add(NuevaTarjeta);
            BiciqContexto.SubmitChanges().Completed+=delegate
            {
                  LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar("La tarjeta se ha generado con éxito","Generación de Tarjeta Exitosa", LogicStudio.Framework.UI.Utilidades.TipoVentana.Ok);
                CerrarVentana();
                var urlReporte = ConfigurationManager.AppSettings["WebSite"].ToString() + ConfigurationManager.AppSettings["CarpetaReportes"].ToString();
                 HtmlPage.Window.Navigate(new System.Uri(urlReporte+ "?Tipo=Cliente&Id=" + ClienteSeleccionado.Id  + "&carnet=CarnetClienteHombre"), "_blank");
                 HtmlPage.Window.Navigate(new System.Uri(urlReporte + "?Tipo=Cliente&Id=" + ClienteSeleccionado.Id + "&carnet=CarnetClienteMujer"), "_blank");
                 HtmlPage.Window.Navigate(new System.Uri(urlReporte + "?Tipo=Cliente&Id=" + ClienteSeleccionado.Id + "&carnet=CarnetClienteNeutro"), "_blank");

             
                      
            };
        }

        public override void Cancelar()
        {
            Action aceptar;
            aceptar = CancelarTarjeta;
            string titulo = string.Format("Cancelar Ipresión de Tarejeta");
            LogicStudio.Framework.UI.Controles.CuadroDialogo.Mostrar("Desea Cancelar la emisión de a tarjeta?", titulo, LogicStudio.Framework.UI.Utilidades.TipoVentana.Confirmar, aceptar);

        }

        private void CancelarTarjeta()
        {
            BiciqContexto.RejectChanges();
            //FacturacionVista vista = new FacturacionVista();
            //FacturacionVistaModelo vistaModelo = new FacturacionVistaModelo(ClienteSeleccionado, true);
            //vista.DataContext = vistaModelo;
            //var Principal = (PrincipalVista)Application.Current.RootVisual;
            //Principal.LimpiarCanvas();
            //Principal.canvasBody.Content = vista;
            CerrarVentana();
        }
        #endregion
    }
}
